package day005.ApplicationContextName;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class LifeBeanImpl implements LifeBean, BeanNameAware, BeanFactoryAware, ApplicationContextAware {
	private ApplicationContext applicationContext;	// 스프링의 beanFactory 구현체를 저장할 변수
	private BeanFactory beanFactory;	// 스프링의 beanFactory 구현체를 저장할 변수
	private String beanName;			// 설정 파일에서 설정한 빈의 id 를 저장할 변수
	
	public void begin() {
		System.out.println("사용자 초기화 메소드");
	}
	
	public void end() {
		System.out.println("사용자 소멸 메소드");
	}

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		System.out.println("setApplicationContext(.....) 실행.....");
		this.applicationContext = applicationContext;
	}
	
	// 객체가 생성될 때 스프링의 BeanFactory 를 전달 받는 메소드
	@Override
	public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
		System.out.println("setBeanFactory(.....) 실행.....");
		this.beanFactory = beanFactory;
	}

	// 빈 객체가 자기 자신의 이름을 알아야 할 경우에 사용
	// 객체가 생성될 때 객체의 id 값을 전달(주입)받는 메소드
	@Override
	public void setBeanName(String beanName) {
		System.out.println("setBeanName(.....) 실행.....");
		this.beanName = beanName;
	}

	@Override
	public void lifeMethod() {		
		System.out.println("비지니스 로직이 수행중입니다.....");
		System.out.println("applicationContext : " + applicationContext);
		System.out.println("beanFactory : " + beanFactory);
		System.out.println("beanName : " + beanName);
	}}